#pragma once

#include "Channel.h"
#include <mutex>
#include <thread>
#include <type_traits>
#include<condition_variable>

namespace muduo{
    class EventLoop;
    class LoopThread{
    private:
        std::mutex _mutex;      //用来避免线程创建，但EventLoop还没实例化就进行获取_loop
        std::condition_variable _cond;  //条件变量，配合mutex使用
        EventLoop* _loop;       //EventLoop指针，EventLoop对象需要在线程内进行实例化
        std::thread _thread;    //EventLoop对应的线程
    private:
        // 实例化EventLoop对象，唤醒_cond阻塞的线程，并开始运行
        void Thread_Entry();
    public:
        // 线程入口函数
        LoopThread();
        // 获取EventLoop指针
        EventLoop* GetEventLoop();
    };
}